package com.example.service;

import com.example.common.BaseResponse;
import com.example.model.user.EditPersonalInfo;
import com.example.model.user.UpdatePassword;
import com.example.model.user.User;
import com.example.model.user.UserUpdateRequest;
import jakarta.servlet.http.HttpServletRequest;

import java.util.List;

public interface UserService {
    /**
     * 用户登录
     * @param userName 用户名
     * @param userPassword 密码
     * @param request request
     * @return 用户
     */
    User userLogin(String userName, String userPassword, HttpServletRequest request);

    /**
     * 用户信息脱敏处理
     * @param user 用户
     * @return 无密码等敏感信息
     */
    User getSafetUser(User user);

    /**
     *
     * @param userName 用户名
     * @param userPassword 用户密码
     * @param checkPassword 确认密码
     * @return id
     */
    Long userRegister(String userName, String userPassword, String checkPassword);

    /**
     * 根据id查询用户，获取用户登录态
     * @param id
     * @return 用户
     */
    User getById(Long id);

    /**
     * 退出登录
     * @param request
     * @return 用户id
     */
    Integer userLogout(HttpServletRequest request);

    /**
     * 获取全部全部用户数据
     * @return 用户集合
     */
    List<User> getUserList();

    /**
     * 用户名模糊查询
     * @param username 用户名
     * @return 用户集合
     */
    List<User> getUserByName(String username);

    /**
     * 更新用户
     * @param userUpdateRequest 更新用户实体
     * @return 是否更新成功
     */
    Boolean updateUser(UserUpdateRequest userUpdateRequest);

    /**
     * 更加id删除
     * @param id 用户id
     * @return 是否删除成功
     */
    Boolean deleteUser(Long id);

    /**
     * 编辑个人信息
     * @param personalInfo 个人信息
     * @return 是否成功
     */
    Boolean updateInfo(EditPersonalInfo personalInfo);

    /**
     * 修改密码
     * @return 是否修改成功
     */
    Boolean updatePassword(UpdatePassword updatePassword);

    /**
     * 重置密码
     * @param id 用户id
     * @return 是否重置成功
     */
    Boolean resetPassword(Long id);
}
